উদাহরণ সহ Custom Queries তৈরি করা

Java Technologies - স্প্রিং বুট ওআরএম (Spring Boot ORM) - Query Methods এবং Custom Queries
176

স্প্রিং ডেটা জেপিএ (Spring Data JPA) ডেটাবেস অপারেশন পরিচালনার জন্য স্বয়ংক্রিয়ভাবে তৈরি মেথড সরবরাহ করে। তবে অনেক সময় কাস্টম কুয়েরি (Custom Query) প্রয়োজন হয়, যেখানে স্পেসিফিক ডেটা ফিল্টারিং বা জটিল লজিক প্রয়োগ করা হয়। স্প্রিং ডেটা জেপিএ কাস্টম কুয়েরি তৈরি করতে JPQL (Java Persistence Query Language) বা Native SQL Query সমর্থন করে।


কাস্টম কুয়েরি কি?

কাস্টম কুয়েরি হলো এমন কুয়েরি যা স্পেসিফিক চাহিদা পূরণের জন্য ম্যানুয়ালি লেখা হয়। এটি ডেটাবেস থেকে নির্দিষ্ট ডেটা ফিল্টার বা জটিল ডেটা রিট্রাইভ করতে ব্যবহৃত হয়।


কাস্টম কুয়েরি তৈরি করার ধাপ

Entity ক্লাস তৈরি

Entity ক্লাস ব্যবহার করে ডেটাবেস টেবিলের ম্যাপিং করতে হবে।

Repository ইন্টারফেস তৈরি

Repository ইন্টারফেসে কাস্টম কুয়েরি ডিফাইন করতে হবে।

@Query এনোটেশন ব্যবহার

কাস্টম কুয়েরি লিখতে @Query এনোটেশন ব্যবহার করতে হয়। এটি JPQL বা Native Query সমর্থন করে।


উদাহরণ

Entity ক্লাস

import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class User {
    @Id
    private Long id;
    private String name;
    private String email;

    // Getter এবং Setter
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
}

Repository ইন্টারফেস

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;

public interface UserRepository extends JpaRepository<User, Long> {

    // কাস্টম JPQL কুয়েরি
    @Query("SELECT u FROM User u WHERE u.name = :name")
    List<User> findUsersByName(@Param("name") String name);

    // কাস্টম Native SQL কুয়েরি
    @Query(value = "SELECT * FROM user WHERE email = :email", nativeQuery = true)
    User findUserByEmail(@Param("email") String email);
}

Controller

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping("/by-name/{name}")
    public List<User> getUsersByName(@PathVariable String name) {
        return userRepository.findUsersByName(name);
    }

    @GetMapping("/by-email/{email}")
    public User getUserByEmail(@PathVariable String email) {
        return userRepository.findUserByEmail(email);
    }
}

@Query এনোটেশনের সুবিধা

  • জটিল কুয়েরি সমর্থন: জটিল ফিল্টারিং এবং কন্ডিশনাল লজিক যুক্ত কুয়েরি তৈরি করা যায়।
  • JPQL এবং Native Query: দুই ধরনের কুয়েরি সমর্থন করে।
  • ডাইনামিক ইনপুট প্যারামিটার: @Param এর মাধ্যমে ইনপুট ডাইনামিকভাবে সেট করা যায়।

JPQL এবং Native Query এর তুলনা

বৈশিষ্ট্যJPQLNative Query
লেখার ধরনJPA স্পেসিফিক, জাভা অবজেক্ট ভিত্তিকডাটাবেস স্পেসিফিক, সরাসরি SQL কোয়েরি
ডেটাবেস নির্ভরতাডেটাবেস ইন্ডিপেনডেন্টডেটাবেস নির্ভর
ব্যবহারিক ক্ষেত্রসহজ এবং সাধারণ কুয়েরির জন্য উপযোগীজটিল এবং ডাটাবেস-স্পেসিফিক কুয়েরির জন্য

সারমর্ম

স্প্রিং বুট ORM-এ কাস্টম কুয়েরি ব্যবহার করে জটিল ডেটাবেস অপারেশন সহজে পরিচালনা করা যায়। @Query এনোটেশন এবং এর সাথে JPQL বা Native Query এর সমন্বয় করে ডেটাবেস থেকে নির্দিষ্ট ডেটা রিট্রাইভ করা কার্যকর। বড় বা জটিল অ্যাপ্লিকেশনের জন্য এটি একটি শক্তিশালী ফিচার।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...